# -*- coding: UTF-8 -*-

import socket# 客户端 发送一个数据，再接收一个数据
import time
import json


file_list = {'user_message':False,'welcome_received':False,'class_file_received':False}
def client_connect():
    #第一次连接
    print('客户端加载完毕')
    try:
        client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #声明socket类型，同时生成链接对象
        client.connect(('localhost',6998)) #建立一个链接，连接到本地的6969端口

        msg = 'client_on_line'
        client.send(msg.encode('utf-8'))  #发送一条信息 python3 只接收btye流
        data = client.recv(10240) #接收一个信息，并指定接收的大小 为1024字节

        # 获取列表里的信息
        if data.decode() == 'serving_online':
            while not file_list['user_message']:
                msg = 'get_user_message'
                client.send(msg.encode('utf-8'))  # 发送一条信息 python3 只接收btye流
                data = client.recv(10240)  # 接收一个信息，并指定接收的大小 为1024字节
                global user_message
                user_message = json.loads(data.decode('utf-8'))
                file_list['user_message'] = True

            while not file_list['welcome_received']:
                msg = 'get_welcome_message'
                client.send(msg.encode('utf-8'))  # 发送一条信息 python3 只接收btye流
                data = client.recv(10240)  # 接收一个信息，并指定接收的大小 为1024字节
                global welcome_message
                welcome_message = json.loads(data.decode('utf-8'))
                file_list['welcome_received'] = True

            while file_list['class_file_received'] != True:
                msg = 'get_class_message'
                client.send(msg.encode('utf-8'))  # 发送一条信息 python3 只接收btye流
                data = client.recv(10240)  # 接收一个信息，并指定接收的大小 为1024字节
                global class_message
                class_message = json.loads(data.decode('utf-8'))
                print(class_message)
                file_list['class_file_received'] = True

            return (user_message,welcome_message,class_message)
        else:
            raise Exception('服务端未正常启用')
    except ConnectionResetError:
        print('服务端已下线')
    except ConnectionRefusedError:
        print ('服务端未正常启用')
    except :
        print ('未知错误')

def send_score(score):
    #发送成绩
    try:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 声明socket类型，同时生成链接对象
        client.connect(('localhost', 6998))  # 建立一个链接，连接到本地的6969端口
        msg = 'client_on_line'
        client.send(msg.encode('utf-8'))  # 发送一条信息 python3 只接收btye流
        data = client.recv(1024)  # 接收一个信息，并指定接收的大小 为1024字节
        if data.decode() == 'serving_online':
            Isusername = 0
            while not Isusername:
                msg = score
                client.send(msg.encode('utf-8'))  # 发送一条信息 python3 只接收btye流
                data = client.recv(1024)  # 接收一个信息，并指定接收的大小 为1024字节
                Isusername = 1
                return

        else:
            raise Exception('服务端未正常启用')
    except:
        print ('未知错误')

def send_alive():
    #发送生存信息
    try:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 声明socket类型，同时生成链接对象
        client.connect(('localhost', 6998))  # 建立一个链接，连接到本地的6969端口
        msg = 'client_on_line'
        client.send(msg.encode('utf-8'))  # 发送一条信息 python3 只接收btye流
        data = client.recv(1024)  # 接收一个信息，并指定接收的大小 为1024字节

        while data.decode() == 'serving_online':
            msg = 'alive'
            client.send(msg.encode('utf-8'))  # 发送一条信息 python3 只接收btye流
            data = client.recv(1024)  # 接收一个信息，并指定接收的大小 为1024字节
            time.sleep(1)

        # 获取列表里的信息
        '''
        if data.decode() == 'serving_online':
            while True:
                msg = 'alive'
                client.send(msg.encode('utf-8'))  #发送一条信息 python3 只接收btye流
                data = client.recv(1024) #接收一个信息，并指定接收的大小 为1024字节
                if data.decode()[0:3] == 'new':
                    return data.decode()[3:]
                else:
                    client.send(msg.encode('utf-8'))
                time.sleep(1)
        else:
            raise Exception('服务端未正常启用')
        '''
    except ConnectionResetError:
        raise Exception('服务端未正常启用')
    except ConnectionRefusedError:
        raise Exception('服务端未正常启用')
    except :
        print ('未知错误')

def log():
    # 登录时获取用户列表
    try:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 声明socket类型，同时生成链接对象
        client.connect(('localhost', 6998))  # 建立一个链接，连接到本地的6969端口
        msg = 'client_on_line'
        client.send(msg.encode('utf-8'))  # 发送一条信息 python3 只接收btye流
        data = client.recv(1024)  # 接收一个信息，并指定接收的大小 为1024字节

        if data.decode() == 'serving_online':
            Isusername = 0
            while not Isusername:
                msg = 'get_user_message'
                client.send(msg.encode('utf-8'))  # 发送一条信息 python3 只接收btye流
                data = client.recv(1024)  # 接收一个信息，并指定接收的大小 为1024字节
                global user_message
                user_message = json.loads(data.decode('utf-8'))
                return user_message

        else:
            raise Exception('服务端未正常启用')
    except:
        print ('未知错误')